<?php
/**
 * @todo для cli запросов нужен свой загрузчик.
 * 
 * Создавая в данном классе методы _init* (пример _intiView)
 * мы создаем методы которые будут запущены автоматичекси
 * в системе, порядо создавания методов определяет их поочередность запуска.
 * 
 * @author nrnwest@gmail.com
 *
 */
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{


    /**
     * Иницилизация php параметров.
     */
    protected function _initPHPparams()
    {
    	$config = Arm_Core::getConfigApplication();
        Zend_Session::setOptions($config->session->toArray());
        iconv_set_encoding('internal_encoding', $config->system->charset);
        mb_internal_encoding($config->system->charset);
        date_default_timezone_set($config->system->timezone);
    }
    
    
    
    
    /**
     * Устновка объекта ответов.
     */
    protected  function _initResponse()
    {
       $response =  new Arm_Controller_Response_Http();
       $response->setHeader('Content-Type',  'text/html; charset=UTF-8');
       Zend_Controller_Front::getInstance()->setResponse($response);
    }



    /**
     * Иницлизация Zend_View
     *
     * @return Zend_View
     */
    protected function _initView ()
    {
        // Инициализация вида
        $view = new Arm_View();
        $view->doctype(Zend_View_Helper_Doctype::XHTML1_STRICT);
        $view->setEncoding(Arm_Core::getConfigApplication()->system->charset);
        // Добавление вида в ViewRenderer
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
        $viewRenderer->setView($view);
        return $view;
    }
    

    /**
     * Иницилизация трансляции - переводчика
     * Плюс регистрация его в регистре.
     */
    protected function _initTranslate()
    {
        $translate = Arm_Translate::getInstance();
        Zend_Validate_Abstract::setDefaultTranslator($translate->getAdapter());
        Zend_Form::setDefaultTranslator($translate->getAdapter());
        Zend_Captcha_Base::setDefaultTranslator($translate->getAdapter());
        Zend_Registry::set('Zend_Translate', $translate->getZendTraslate());
        return;
    }
    
    /**
     * Иницилизация соединения с базой данных.
     */
    protected function _initDb()
    {
        Zend_Db_Table_Abstract::setDefaultAdapter(Arm_Db::getAdapter());
        Zend_Db_Table::setDefaultMetadataCache(Arm_Cache::getInstance()->getFrontendCore());    
    }
    
    
    
    /**
     * Иницилизация тем оформления.
     */
    protected function _initThemes()
    {
        Zend_Controller_Action_HelperBroker::addHelper(new Arm_Controller_Action_Helper_Themes());
    }

   
    /**
     * Иницилизация прав доступа.
     */
    protected function _initAcl()
    {
        // добавляем помодщника  действия acl
        Zend_Controller_Action_HelperBroker::addHelper(new Arm_Controller_Action_Helper_Acl());
    }
    
    /**
     * Регистрация плагинов контролеров в системе.
     */
    protected function _initPluginController()
    {     
        Zend_Controller_Front::getInstance()->registerPlugin(new Arm_Controller_Plugin_Bootstrap());
        Zend_Controller_Front::getInstance()->registerPlugin(new Arm_Controller_Plugin_Page(), 105);
    }
    
    /**
     * Панель отладки
     */
    protected function _initZfDebuger()
    {
     if(Arm_Core::getConfigApplication()->system->debugpanel === '0') {
         return;
     }
     $options = array(
    'jquery_path' => Arm_Jquery::JQUERY_PATH,
    'image_path' =>'/images/debugbar',
    'plugins' => array('Variables', 
                       'Html', 
                       'Database' => array('adapter' => array('standard' => Arm_Db::getAdapter())), 
                       'File' => array('basePath' => Arm_Core::getPathLibrary(), 'library' => 'Arm'), 
                       'Memory', 
                       'Time', 
                       'Registry', 
                       'Cache' => array('backend' => Arm_Cache::getInstance()->getFrontendCore()->getBackend()), 
                       'Exception')
      );
      $debug = new Arm_Controller_Plugin_Debug($options);
      $debug->registerPlugin(new Arm_Controller_Plugin_Debug_Plugin_Log());
      $debug->registerPlugin(new Arm_Controller_Plugin_Debug_Plugin_Auth());
      Zend_Controller_Front::getInstance()->registerPlugin($debug, 10);
    }


}